package com.hyper_yang._03_designpatterns.principles.demo7.before;

/** 合成复用原则 软件复用时，要尽量先使用组合或者聚合等关联关系来实现，其次才考虑使用继承关系来实现。
 * 继承复用简单易实现，但缺点也同样明显:
 * 1、继承复用破歪了类的封装性，因为继承会将父类的实现细节暴露给子类，父类对子类是透明的 【白箱复用】
 * 2、子类与父类的耦合度高。弗雷德实现的任何改变都会导致子类的实现发生变化。【不利于拓展和维护】
 * 3、限制了复用的灵活性，从父类继承而来的实现是静态的，在编译时已经定义，所以在运行时不可能发生变化
  */
public class Test {
    public static void main(String[] args) {
        Car car1 = new RedElectricCar();
        car1.drive();
        Car car2 = new WhiteElectricCar();
        car2.drive();
        Car car3 = new RedGasCar();
        car3.drive();
        Car car4 = new WhiteGasCar();
        car4.drive();
    }
}
